///////////////////////////////////////////////////////////////////// // "On the torsion of rational elliptic curves over sextic fields" // // Harris B. Daniels and Enrique González-Jiménez // ///////////////////////////////////////////////////////////////////// // 2/8/2018 - Magma 2.23 // Magma script related to Theorem 12 /* (9) -> (2,18) Family */ // Kubert-Tate nomal form for cyclic torsion of order 9 F := FunctionField(Rationals()); a := t^2*(t-1); b := t^2*(t-1)*(t^2-t+1); E := EllipticCurve([1-a,-b,-b,0,0]); assert IsIsomorphic(TorsionSubgroup(E),AbelianGroup([9])); p:=Discriminant(E); Zt:=PolynomialRing(Integers()); p:= Zt!Numerator(p); SquarefreePart(p); f:=SquarefreePart(p); H:=HyperellipticCurve(f); assert 3 eq Genus(H); K:=NumberField(Polynomial([1,3,-6,1])); H:=HyperellipticCurve(f); H:=BaseChange(H,K); G1, m1 := AutomorphismGroup(H); gs:=[ m1(g) : g in G1 ]; gg:=gs[3]; GG:=AutomorphismGroup(H,[gg]); Q,pro := CurveQuotient(GG); EE,map2:=EllipticCurve(Q); EEE:=BaseChange(EllipticCurve("36a3"),K); boo,m:=IsIsomorphic(EE,EEE); assert boo; GEE,map:=MordellWeilGroup(EE); assert [2] eq AbelianInvariants(GEE); assert Degree(pro) eq 3; assert {@ m(map(k*GEE.1)) : k in [1,2] @} eq {@ m(map2(pro(H!s))) : s in {[0,0,1],[1,0,1],[1,0,0],[a,0,1],[-a^2 + 5*a + 2,0,1],[a^2 - 6*a + 4,0,1]} @}; /* (9) —> (3,9) Family */ // Kubert-Tate nomal form for cyclic torsion of order 9 F := FunctionField(Rationals()); a := t^2*(t-1); b := t^2*(t-1)*(t^2-t+1); E := EllipticCurve([1-a,-b,-b,0,0]); assert IsIsomorphic(TorsionSubgroup(E),AbelianGroup([9])); f3 := DivisionPolynomial(E,3); f := Factorization(f3)[2][1]; K := ext; //K = Q(x(E[3]) over Q assert Degree(K) eq 3; P := PolynomialRing(K); L := ext; //L = Q(E[3]) over K assert Degree(L) eq 2; P := PolynomialRing(K); EL := BaseChange(E,L); P1 := EL![0,0]; //P1 is the rational point of order 9. P2 := EL![a,b]; //P2 is the point of order 3 defined over L assert Order(P1) eq 9; assert Order(P2) eq 3; assert not P2 in {@ n*P1 : n in [1..9] @}; //Check that P1 and P2 are independent. /* (12) —> (3,12) Family */ // Kubert-Tate nomal form for cyclic torsion of order 12 F := FunctionField(Rationals()); a := t*(1-2*t)*(3*t^2-3*t+1)*(t-1)^-3; b := -a*(2*t^2-2*t+1)*(t-1)^-1; E := EllipticCurve([1-a,-b,-b,0,0]); assert IsIsomorphic(TorsionSubgroup(E),AbelianGroup([12])); f3 := DivisionPolynomial(E,3); f := Factorization(f3)[2][1]; K := ext; //K = Q(x(E[3]) over Q assert Degree(K) eq 3; P := PolynomialRing(K); L := ext; assert Degree(L) eq 2; //L = Q(E[3]) over K EL := BaseChange(E,L); P1 := EL![0,0]; //P1 is the rational point of order 12. P2 := EL![a,b]; //P2 is the point of order 3 defined over L assert Order(P1) eq 12; assert Order(P2) eq 3; assert not P2 in {@ n*P1 : n in [1..12] @}; //Check that P1 and P2 are independent. /* (3) —> (6,6) Family */ F := FunctionField(Rationals()); E := EllipticCurve([-3*(-(t^3+1)^2+1)^3*(-(t^3+1)^2+9), -2*(-(t^3+1)^2+1)^4*((-(t^3+1)^2)^2-18*(-(t^3+1)^2)-27)]); assert IsIsomorphic(TorsionSubgroup(E),AbelianGroup([3])); f3 := DivisionPolynomial(E,3); f := Factorization(f3)[2][1]; K := ext; //K = Q(x(E[3]) over Q assert Degree(K) eq 3; P := PolynomialRing(K); L := ext; assert Degree(L) eq 2; EL := BaseChange(E,L); f6L:= DivisionPolynomial(EL,6); S:=[Points(EL,r[1]) : r in Roots(f6L)]; L6:=&join{Seqset(P) : P in S}; assert #L6 eq 35; /* F := FunctionField(Rationals()); a:=(1 + t^3)^2; E := EllipticCurve([-3*(1-a)^3*(9-a), -2*(1-a)^4*(a^2 + 18*a - 27)]); assert IsIsomorphic(TorsionSubgroup(E),AbelianGroup([3])); f3 := DivisionPolynomial(E,3); f := Factorization(f3)[2][1]; K := ext; //K = Q(x(E[3]) over Q assert Degree(K) eq 3; P := PolynomialRing(K); L := ext; assert Degree(L) eq 2; EL := BaseChange(E,L); f6L:= DivisionPolynomial(EL,6); S:=[Points(EL,r[1]) : r in Roots(f6L)]; L6:=&join{Seqset(P) : P in S}; assert #L6 eq 35; */ /* F := FunctionField(Rationals()); a:=(t^3-1)^2; E := EllipticCurve([-3*(a-1)^3*(a-9), -2*(a-1)^4*(a^2 + 18*a - 27)]); assert IsIsomorphic(TorsionSubgroup(E),AbelianGroup([3])); f3 := DivisionPolynomial(E,3); f := Factorization(f3)[2][1]; K := ext; //K = Q(x(E[3]) over Q assert Degree(K) eq 3; P := PolynomialRing(K); L := ext; assert Degree(L) eq 2; EL := BaseChange(E,L); f6L:= DivisionPolynomial(EL,6); S:=[Points(EL,r[1]) : r in Roots(f6L)]; L6:=&join{Seqset(P) : P in S}; assert #L6 eq 35; */